package cn.tedu.csmall.stock.webapi.quartz;

import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

// QuartzConfig类用于配置绑定调用的方法和触发的关系
// 这个触发实际上会由Spring容器中的Scheduler对象调度
// 下面开始配置,Spring所有配置类都需要添加@Configuration
@Configuration
public class QuartzConfig {

    // 配置本身的目的就是将Job对象和Trigger对象保存到Spring容器中让Scheduler来调度
    // 可以利用@Bean注解,将上述两个对象保存Spring容器中
    @Bean
    public JobDetail showTime(){
        // JobDetail对象配置时,需要将欲触发的Job接口实现类配置出来
        // JobBuilder.newJob方法是可以创建JobDetail对象的,方法参数就是Job接口实习类的反射
        // 后面触发这个方法时,每次触发都会实例化一个新的QuartzJob对象运行
        return JobBuilder.newJob(QuartzJob.class)
                // 给当前任务起名,不要和其它任务名称重复即可
                .withIdentity("dateTime")
                // 默认情况下JobDetail对象生成后,如果没有触发器绑定就会自动移除
                // 在实际运行时,JobDetail实例化出来,没有绑定就被移除了
                // 设置storeDurably方法之后,JobDetail即使没有被绑定,也不会被删除了
                .storeDurably()
                .build();
    }

    // 要想实现"什么时间做什么事情"还需要配置时间的计划
    // 下面开始配置Trigger触发器的对象,绑定上面的JobDetail
    @Bean
    public Trigger showTimeTrigger(){
        // 声明Corn表达式,定义触发时间
        CronScheduleBuilder cron=
                CronScheduleBuilder.cronSchedule("0/10 * * * * ?");
        return TriggerBuilder.newTrigger()
                // 设置要绑定的JobDetail对象
                .forJob(showTime())
                // 当前触发器也要起名字,名字也是不要重复出现的
                .withIdentity("dateTimeTrigger")
                // 绑定cron表达式
                .withSchedule(cron)
                .build();
    }


    //@Bean
    public JobDetail subStock(){
        return JobBuilder.newJob(StockJob.class)
                .withIdentity("subStock")
                .storeDurably()
                .build();
    }

    //@Bean
    public Trigger subStockTrigger(){

        CronScheduleBuilder cron=
                CronScheduleBuilder.cronSchedule("0/30 * * * * ?");

        return TriggerBuilder.newTrigger()
                .forJob(subStock())
                .withIdentity("subStockTrigger")
                .withSchedule(cron)
                .build();
    }




}
